import numpy as np 
 
x = np.array([[1,  2],  [3,  4],  [5,  6]]) 
print(x)
y = x[[0,1,2],  [0,1,0]]  # 获取数组中 (0,0)，(1,1) 和 (2,0) 位置处的元素
print (y)
print('='*32)

x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
print ('我们的数组是：' )
print (x)
print ('\n')
rows = np.array([[0,0],[3,3]]) 
cols = np.array([[0,2],[0,2]]) 
y = x[rows,cols]  # x[[[0,0],[3,3]],[[0,2],[0,2]]]
# rows = np.array([[0,0],[3,3]])表示要选取的行号。
# cols = np.array([[0,2],[0,2]])表示要选取的列号。
# 在这个例子中，就形成了四组坐标：(0,0), (0,2), (3,0), (3,2)
print  ('这个数组的四个角元素是：')
print (y)
print('='*32)

a = np.array([[1,2,3], [4,5,6],[7,8,9]])
b = a[1:3, 1:3]
c = a[1:3,[1,2]]
d = a[...,1:]
print(b)
print(c)
print(d)
print('='*32)

# 布尔索引
print('='*16+'布尔索引'+'='*16)
x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
print ('我们的数组是：')
print (x)
print ('\n')
# 现在我们会打印出大于 5 的元素  
print  ('大于 5 的元素是：')
print (x[x >  5])
print('='*32)

a = np.array([np.nan,  1,2,np.nan,3,4,5])  
print (a[~np.isnan(a)])
print('='*32)

a = np.array([1,  2+6j,  5,  3.5+5j])  
print (a[np.iscomplex(a)])
print('='*32)


# 花式索引：花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。
print('='*16+'花式索引'+'='*16)
x = np.arange(9)
print(x)
# 一维数组读取指定下标对应的元素
print("-------读取下标对应的元素-------")
x2 = x[[0, 6]] # 使用花式索引
print(x2)

print(x2[0])
print(x2[1])
print('='*32)

x=np.arange(32).reshape((8,4))
print(x)
# 二维数组读取指定下标对应的行
print("-------读取下标对应的行-------")
print (x[[4,2,1,7]])
print('='*32)

print (x[[-4,-2,-1,-7]])
print('='*32)

print (x[np.ix_([1,5,7,2],[0,3,1,2])])
print('='*32)